package com.itaming.lycheeframework.security.authorization;

import com.itaming.lycheeframework.security.authentication.AuthContextHolder;

import java.time.LocalTime;
import java.util.Collection;

/**
 * 授权检查器
 *
 * @author A.Ming
 */
public class AuthorizationChecker {

    /**
     * 是否具有指定的权限
     *
     * @param permission 权限
     * @return boolean
     */
    public boolean hasPermission(String permission) {
        return AuthContextHolder.hasPermission(permission);
    }

    /**
     * 是否具有指定的全部权限
     *
     * @param permissions 权限集合
     * @return boolean
     */
    public boolean hasAllPermission(String... permissions) {
        return AuthContextHolder.hasAllPermission(permissions);
    }

    /**
     * 是否具有指定的全部权限
     *
     * @param permissions 权限集合
     * @return boolean
     */
    public boolean hasAllPermission(Collection<String> permissions) {
        return AuthContextHolder.hasAllPermission(permissions);
    }

    /**
     * 是否具有任意一个指定的权限
     *
     * @param permissions 权限集合
     * @return boolean
     */
    public boolean hasAnyPermission(String... permissions) {
        return AuthContextHolder.hasAnyPermission(permissions);
    }

    /**
     * 是否具有任意一个指定的权限
     *
     * @param permissions 权限集合
     * @return boolean
     */
    public boolean hasAnyPermission(Collection<String> permissions) {
        return AuthContextHolder.hasAnyPermission(permissions);
    }

    /**
     * 是否具有指定的角色
     *
     * @param role 角色
     * @return boolean
     */
    public boolean hasRole(String role) {
        return AuthContextHolder.hasRole(role);
    }

    /**
     * 是否具有指定的全部角色
     *
     * @param roles 角色集合
     * @return boolean
     */
    public boolean hasAllRole(String... roles) {
        return AuthContextHolder.hasAllRole(roles);
    }

    /**
     * 是否具有指定的全部角色
     *
     * @param roles 角色集合
     * @return boolean
     */
    public boolean hasAllRole(Collection<String> roles) {
        return AuthContextHolder.hasAllRole(roles);
    }

    /**
     * 是否具有任意一个指定的角色
     *
     * @param roles 角色集合
     * @return boolean
     */
    public boolean hasAnyRole(String... roles) {
        return AuthContextHolder.hasAnyRole(roles);
    }

    /**
     * 是否具有任意一个指定的角色
     *
     * @param roles 角色集合
     * @return boolean
     */
    public boolean hasAnyRole(Collection<String> roles) {
        return AuthContextHolder.hasAnyRole(roles);
    }

    /**
     * 是否为管理员
     *
     * @return boolean
     */
    public boolean isAdmin() {
        return AuthContextHolder.isAdmin();
    }

    /**
     * 是否为超级管理员
     *
     * @return boolean
     */
    public boolean isSuperAdmin() {
        return AuthContextHolder.isSuperAdmin();
    }

    /**
     * 是否在时间区间内
     *
     * @param start 开始时间(包含)
     * @param end   结束时间(包含)
     * @return boolean
     */
    public boolean inHour(int start, int end) {
        int hour = LocalTime.now().getHour();
        return hour >= start && hour <= end;
    }

}
